package org.ddd.book.domain.book.entity;

import lombok.Data;
import org.ddd.book.domain.IBaseEntity;
import org.ddd.book.domain.book.event.BookroomRemoveEvent;
import org.ddd.book.domain.book.repository.IBookroomRepository;
import org.ddd.book.domain.factoty.EventFactory;
import org.ddd.book.domain.factoty.RepositoryFactory;
import org.ddd.book.domain.security.vo.UserVO;

/**
 * 图书室
 */
@Data
public class BookroomEntity implements IBaseEntity {
    // 唯一标识
    private Long roomId;
    // 所属图书馆（图书馆的ID）
    private Long library;
    // 图书室名字
    private String roomName;
    // 管理员
    private UserVO admin;
    // 状态
    private BookroomState state;
    // 所在位置（#2幢301室）
    private String location;
    // 简介
    private String introductory;
    // 开放时间（周一到周五 10:00-18:00）
    private String openTime;

    @Override
    public void save() {
        // 检查参数完整性
        RepositoryFactory.get(IBookroomRepository.class).save(this);
    }

    @Override
    public void remove() {
        // 检查能否被移除
        // 从存储移除
        RepositoryFactory.get(IBookroomRepository.class).remove(roomId);
        // 发送领域事件
        EventFactory.publishEvent(new BookroomRemoveEvent(roomId));
    }

    /**
     * 更改图书室名称
     *
     * @param newName 新的图书室名称
     */
    public void changeBookroomName(String newName) {

    }

    /**
     * 更改图书室管理员
     *
     * @param newAdmin 新的管理员
     */
    public void changeBookroomAdmin(UserVO newAdmin) {

    }

    /**
     * 更改图书室开放时间
     *
     * @param newOpenTime 新的开放时间
     */
    public void changeOpenTime(String newOpenTime) {

    }

    /**
     * 启用图书室
     */
    public void useBookroom() {

    }

    /**
     * 维修图书室
     */
    public void maintainBookroom() {

    }

    /**
     * 废弃图书室
     */
    public void abandonBookroom() {

    }

    /**
     * 添加书架
     *
     * @param bookshelf 书架
     */
    public void addBookshelf(BookshelfEntity bookshelf) {

    }

    /**
     * 移除书架
     *
     * @param bookshelfNo 书架编号
     */
    public void removeBookshelf(String bookshelfNo) {

    }

    public enum BookroomState {
        USING, // 使用中
        MAINTAIN, // 维护中
        ABANDON // 弃用
    }
}
